Safe Calls (?.) এবং Elvis Operator (?:)
কটলিনে Safe Calls এবং Elvis Operator ব্যবহার করে null সেফটি নিশ্চিত করা হয়, যা কোডের নিরাপত্তা এবং স্থিতিশীলতা বাড়ায়। এগুলো null পয়েন্টার এক্সেপশন (NullPointerException) থেকে রক্ষা করতে সাহায্য করে এবং নিরাপদভাবে মানের অ্যাক্সেস করতে দেয়। নিচে এই কনসেপ্টগুলো বিস্তারিত আলোচনা করা হলো:
১. Safe Calls (?.)
Safe Calls ব্যবহার করে আপনি null হতে পারে এমন একটি অবজেক্টের প্রোপার্টি বা মেথডকে নিরাপদে এক্সেস করতে পারেন। Safe Call অপারেটর ?. ব্যবহার করে, যদি অবজেক্টটি null হয়, তাহলে এটি null রিটার্ন করবে এবং এক্সেপশন ঘটবে না।
উদাহরণ:
data class User(val name: String, val age: Int)
fun main() {
val user: User? = null
// Safe call
val userName = user?.name
println(userName) // আউটপুট: null
}
ব্যাখ্যা:
- এখানে
userএকটি nullableUserঅবজেক্ট, যা null হতে পারে। user?.nameএর মাধ্যমে আমরাnameপ্রোপার্টি অ্যাক্সেস করার চেষ্টা করছি। যদিusernull হয়, তাহলেuserNamenull হয়ে যাবে এবং কোনো এক্সেপশন ঘটবে না।
২. Elvis Operator (?:)
Elvis Operator ?: ব্যবহার করে একটি ডিফল্ট মান প্রদান করতে পারেন যখন একটি মান null হয়। এটি Safe Calls-এর সাথে ব্যবহার করা হয়।
উদাহরণ:
fun main() {
val user: User? = null
// Safe call with Elvis operator
val userName = user?.name ?: "Unknown User"
println(userName) // আউটপুট: Unknown User
}
ব্যাখ্যা:
- এখানে,
user?.nameযদি null হয়, তাহলে Elvis Operator (?:) ডিফল্ট মান"Unknown User"প্রদান করবে। - ফলে,
userNamevariable এ"Unknown User"সংরক্ষণ হবে।
৩. Safe Calls এবং Elvis Operator একসাথে ব্যবহার
Safe Calls এবং Elvis Operator একসাথে ব্যবহার করলে, আপনি সহজেই nullable ভ্যালু প্রসেস করতে পারেন এবং একটি ডিফল্ট মান নিশ্চিত করতে পারেন।
উদাহরণ:
data class Address(val street: String)
data class User(val name: String, val age: Int, val address: Address?)
fun main() {
val user: User? = User("Alice", 30, null)
val street = user?.address?.street ?: "Street not available"
println(street) // আউটপুট: Street not available
}
ব্যাখ্যা:
- এখানে
userএরaddressপ্রোপার্টি null, তাইuser?.address?.streetnull হবে। - Elvis Operator ব্যবহার করে, ডিফল্ট মান
"Street not available"প্রদান করা হচ্ছে।
৪. চেইনিং Safe Calls
Safe Calls চেইনিং করার মাধ্যমে আপনি nested প্রোপার্টি নিরাপদে অ্যাক্সেস করতে পারেন।
উদাহরণ:
data class City(val name: String)
data class Address(val street: String, val city: City?)
data class User(val name: String, val address: Address?)
fun main() {
val user: User? = User("Bob", Address("5th Avenue", null))
// Chaining safe calls
val cityName = user?.address?.city?.name ?: "City not available"
println(cityName) // আউটপুট: City not available
}
ব্যাখ্যা:
- এখানে
userএরaddressএবংcityপ্রোপার্টি চেইন করে অ্যাক্সেস করা হয়েছে। - যদি কোন স্তরে null থাকে, তাহলে Safe Calls ব্যবহারের মাধ্যমে পুরো চেইনটি নিরাপদে কাজ করবে এবং Elvis Operator ডিফল্ট মান প্রদান করবে।
উপসংহার
কটলিনের Safe Calls (?.) এবং Elvis Operator (?:) ব্যবহার করে আপনি সহজেই null সেফটি নিশ্চিত করতে পারেন, যা প্রোগ্রামের স্থিতিশীলতা বাড়ায় এবং null পয়েন্টার এক্সেপশন থেকে রক্ষা করে। এগুলো ব্যবহার করা সহজ এবং কোডকে আরও পরিষ্কার করে তোলে।